Code: 
 Public Function DollarToString(ByVal nAmount As Currency) As String
'Example:
'  DollarToString(5.99) = " five dollars and ninety-nine cents"
    Dim nDollar As Currency
    Dim nCent As Currency
    
    nDollar = Int(nAmount)
    nCent = (Abs(nAmount) * 100) Mod 100
    
    DollarToString = NumToString(nDollar) & " dollar"
    
    If Abs(nDollar) <> 1 Then
        DollarToString = DollarToString & "s"
    End If
    
    DollarToString = DollarToString & " and" & _
    NumToString(nCent) & " cent"
    
    If Abs(nCent) <> 1 Then
        DollarToString = DollarToString & "s"
    End If
End Function

Public Function NumToString(ByVal nNumber As Currency) As String
'Example: NumToString(123) = " one hundred twenty-three"
    Dim bNegative As Boolean
    Dim bHundred As Boolean

    If nNumber < 0 Then
        bNegative = True
    End If

    nNumber = Abs(Int(nNumber))
    If nNumber < 1000 Then
        If nNumber \ 100 > 0 Then
            NumToString = NumToString & _
                NumToString(nNumber \ 100) & " hundred"
            bHundred = True
        End If
        nNumber = nNumber - ((nNumber \ 100) * 100)
        Dim bNoFirstDigit As Boolean
        bNoFirstDigit = False
        Select Case nNumber \ 10
            Case 0
                Select Case nNumber Mod 10
                    Case 0
                        If Not bHundred Then
                            NumToString = NumToString & " zero"
                        End If
                    Case 1: NumToString = NumToString & " one"
                    Case 2: NumToString = NumToString & " two"
                    Case 3: NumToString = NumToString & " three"
                    Case 4: NumToString = NumToString & " four"
                    Case 5: NumToString = NumToString & " five"
                    Case 6: NumToString = NumToString & " six"
                    Case 7: NumToString = NumToString & " seven"
                    Case 8: NumToString = NumToString & " eight"
                    Case 9: NumToString = NumToString & " nine"
                End Select
                bNoFirstDigit = True
            Case 1
                Select Case nNumber Mod 10
                    Case 0: NumToString = NumToString & " ten"
                    Case 1: NumToString = NumToString & " eleven"
                    Case 2: NumToString = NumToString & " twelve"
                    Case 3: NumToString = NumToString & " thirteen"
                    Case 4: NumToString = NumToString & " fourteen"
                    Case 5: NumToString = NumToString & " fifteen"
                    Case 6: NumToString = NumToString & " sixteen"
                    Case 7: NumToString = NumToString & " seventeen"
                    Case 8: NumToString = NumToString & " eighteen"
                    Case 9: NumToString = NumToString & " nineteen"
                End Select
                bNoFirstDigit = True
            Case 2: NumToString = NumToString & " twenty"
            Case 3: NumToString = NumToString & " thirty"
            Case 4: NumToString = NumToString & " forty"
            Case 5: NumToString = NumToString & " fifty"
            Case 6: NumToString = NumToString & " sixty"
            Case 7: NumToString = NumToString & " seventy"
            Case 8: NumToString = NumToString & " eighty"
            Case 9: NumToString = NumToString & " ninety"
        End Select
        If Not bNoFirstDigit Then
            If nNumber Mod 10 <> 0 Then
                NumToString = NumToString & "-" & _
                    Mid(NumToString(nNumber Mod 10), 2)
            End If
        End If
    Else
        Dim nTemp As Currency
        nTemp = 10 ^ 12 'trillion
        Do While nTemp >= 1
            If nNumber >= nTemp Then
                NumToString = NumToString & _
                    NumToString(Int(nNumber / nTemp))
                Select Case Int(Log(nTemp) / Log(10) + 0.5)
                    Case 12: NumToString = NumToString & " trillion"
                    Case 9: NumToString = NumToString & " billion"
                    Case 6: NumToString = NumToString & " million"
                    Case 3: NumToString = NumToString & " thousand"
                End Select
                nNumber = nNumber - (Int(nNumber / nTemp) * nTemp)
            End If
            nTemp = nTemp / 1000
        Loop
    End If
    If bNegative Then
        NumToString = " negative " & NumToString
    End If
End Function

Public Function NumToStringTh(ByVal nNumber As Currency) As String
'Example: NumToStringTh(123) = " one hundred twenty-third"

    Dim sNum As String
    Dim sExtra As String
    Dim nSpace As String

    'Convert the number
    sNum = NumToString(nNumber)
    'Find the location of the last space or dash
    nSpace = Len(sNum)
    
    Do Until Mid(sNum, nSpace, 1) = " " Or _
        Mid(sNum, nSpace, 1) = "-"
        nSpace = nSpace - 1
    Loop

    sExtra = Mid(sNum, nSpace + 1)
    sNum = Mid(sNum, 1, nSpace)
    
    'Conver the last word ("one" -> "first", etc)
    Select Case sExtra
        Case "hundred":   NumToStringTh = sNum & "hundredth"
        Case "zero" 'no such thing as 'zeroth'
            NumToStringTh = sNum & "zero"
        Case "one":       NumToStringTh = sNum & "first"
        Case "two":       NumToStringTh = sNum & "second"
        Case "three":     NumToStringTh = sNum & "third"
        Case "four":      NumToStringTh = sNum & "fourth"
        Case "five":      NumToStringTh = sNum & "fifth"
        Case "six":       NumToStringTh = sNum & "sixth"
        Case "seven":     NumToStringTh = sNum & "seventh"
        Case "eight":     NumToStringTh = sNum & "eighth"
        Case "nine":      NumToStringTh = sNum & "ninth"
        Case "ten":       NumToStringTh = sNum & "tenth"
        Case "eleven":    NumToStringTh = sNum & "eleventh"
        Case "twelve":    NumToStringTh = sNum & "twelfth"
        Case "thirteen":  NumToStringTh = sNum & "thirteenth"
        Case "fourteen":  NumToStringTh = sNum & "fourteenth"
        Case "fifteen":   NumToStringTh = sNum & "fifteenth"
        Case "sixteen":   NumToStringTh = sNum & "sixteenth"
        Case "seventeen": NumToStringTh = sNum & "seventeenth"
        Case "eighteen":  NumToStringTh = sNum & "eighteenth"
        Case "nineteen":  NumToStringTh = sNum & "nineteenth"
        Case "twenty":    NumToStringTh = sNum & "twentieth"
        Case "thirty":    NumToStringTh = sNum & "thirtieth"
        Case "forty":     NumToStringTh = sNum & "fortieth"
        Case "fifty":     NumToStringTh = sNum & "fiftieth"
        Case "sixty":     NumToStringTh = sNum & "sixtieth"
        Case "seventy":   NumToStringTh = sNum & "seventieth"
        Case "eighty":    NumToStringTh = sNum & "eightieth"
        Case "ninety":    NumToStringTh = sNum & "ninetieth"
        Case "trillion":  NumToStringTh = sNum & "trillionth"
        Case "billion":   NumToStringTh = sNum & "billionth"
        Case "million":   NumToStringTh = sNum & "millionth"
        Case "thousand":  NumToStringTh = sNum & "thousandth"
        Case Else 'This shouldn't happen, but just in case
            NumToStringTh = NumToString(nNumber)
    End Select
    
End Function

Public Function DateToString(FromDate As String) As String
'Example: ' DateToString(#1/1/2001#) = "January the first, two thousand one"

    DateToString = Format(FromDate, "mmmm") & " the" & _
        NumToStringTh(DatePart("d", FromDate)) & "," & _
        NumToString(DatePart("yyyy", FromDate))
        
End Function

 
  
Sample Usage: 
  
     Debug.Print DollarToString(1234.11)
    Debug.Print NumToString(-54321)

 
